#include "Animation.h"

#define ANIM_TIME 300    // 切换动画时长（毫秒）
/**
  * @简介     缓动函数，用于实现非线性动画
  * @参数     t - 时间进度（0.0~1.0）
  * @返回值   缓动后的进度值（0.0~1.0）
  */
float ease(float t) {
    return t * t * t; // 三次方曲线（加速效果）
}

/**
  * @简介     执行菜单切换动画
  * @参数     oldItem - 当前显示的菜单项
  * @参数     newItem - 目标菜单项
  * @参数     dir     - 方向（1=向右切换，-1=向左切换）
  */
void Switch(MenuItem oldItem, MenuItem newItem, int dir) {
    /* 原始动画代码完全保留 */
    uint32_t start = HAL_GetTick();
    float t = 0.0f;
    
    while(t < 1.0f) {
        t = (HAL_GetTick() - start) / (float)ANIM_TIME;
        t = t > 1.0f ? 1.0f : t;
        
        int pos = ease(t) * OLED_WIDTH * dir;
        OLED_Clear();
        Draw(oldItem, -pos);
        Draw(newItem, dir*OLED_WIDTH - pos);
        OLED_Update();
        HAL_Delay(15);
    }
}
